﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PhoenixCrabV2.Sim.World.Actions
{
    public abstract class Action
    {
        public event EventHandler actionTaken;
    
        public List<PhoenixCrabV2.Sim.World.Effects.Effect> effects
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }

        public List<PhoenixCrabV2.Sim.World.Actions.IActableUpon> actUpon
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }

        /// <summary>
        /// the actor of this action
        /// </summary>
        internal PhoenixCrabV2.Sim.World.Actions.IActor actor
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }

        /// <summary>
        /// attempts to execute the action - sends out a notification as well to all concerned parties
        /// </summary>
        public void executeAction()
        {
            //notifiy interested parties that this action is occurring
            //TODO


            //do they somehow interfere with the action?
            //TODO - check for this



            //now execute action
            actionSpecifics();
        }

        /// <summary>
        /// this is what happens when the action is to commence - interested parties are already notified that this action is about to start, and have already reacted
        /// </summary>
        private void actionSpecifics()
        {
            throw new System.NotImplementedException();
        }

    }
}
